import router from "./router";
import store from "./store";
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

const whiteList = ['/login', '/404']


// 前置守卫
// to:去哪里
// from: 哪里来
// next: 下一个  我执行完了，我没问题了，到你了
// next是必须调用的   next()表示通过  next(路由地址)表示调到那里去
router.beforeEach(async (to, from, next) => {
   // 开启进度条
   NProgress.start()
   if (store.getters.token) {
      //进入这里 表示有token  已经登录
      // 如果有token，看一下是否是login，如果是login就不需要重复登录了
      // 直接跳转到首页
      if (to.path === '/login') {
         // 重复登录：我让你自动登录，就是直接跳转到首页
         next('/')
      } else {
         // 获取用户资料的时机：登录以后，跳转业务页面之前
         // 要判断是不是已经获取过资料了
         if (!store.getters.userId) {
            // 拿到用户角色的数据
            const { roles } = await store.dispatch('user/getUserInfo')
            // 加await 是因为请求数据是异步的，next()是同步的，需要等待记载完之后才能进行下一步
            const routes = await store.dispatch('permission/filterRoutes', roles.menus)
            // 得到动态路由之后在把添加到路由数组里面
            router.addRoutes(routes)
            router.addRoutes([{ path: '*', redirect: '/404', hidden: true }])
            next(to.path)
         }
         // 已经登录并且要访问非登录页面  例如首页 员工列表 xxx
         next()
      }
   } else {
      // 没有token 没有登录
      if (whiteList.includes(to.path)) {
         // if (whiteList.indexOf(to.path) >= 0) {
         // 在白名单里直接方向
         next()
      } else {
         // 不在白名单里面，不能放行，让去登录页面登录
         next('/login')
      }
   }
   // 关闭进度条
   NProgress.done()
})

// router.beforeEach((to, from, next) => {
//    if (store.getters.token) {
//       return to.path === '/login' ? next('/') : next('/login')
//    }
//    whiteList.includes(to.path) ? next() : next('/login')
// })



// 后置守卫
router.afterEach(() => {
   NProgress.done()
})